【MFC】MFC中CString.Format的详细用法 您所在的位置:网站首页 format 小数 【MFC】MFC中CString.Format的详细用法

【MFC】MFC中CString.Format的详细用法

2023-10-28 05:19| 来源: 网络整理| 查看: 265

参考来源: MFC中CString.Format的详细用法 来源作者: yumodev 来源地址: https://blog.csdn.net/wangkaishou/article/details/5846152

Format简介

首先看它的声明: function Format(const Format: string; const Args: array of const): string; overload; (事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍 ) Format 参数是一个格式字符串 string,用于格式化Args里面的值的。 Args是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。

如例子: str.Format(_T(“Hello %6s”), _T(“World”)); 返回后就是 Hello World Format参数的详细情况: Format里面可以写普通的字符串,比如 "Hello " 但有些格式指令字符具有特殊意义,比如 “%6s”

1、Format格式指令具的形式 "%" [index ":"] ["-"] [width] ["." prec] type

它是以"%"开始,而以type结束,type表示一个具体的类型。中间是用来格式化type类型的指令字符,是可选的。

1.1、Format常用type字符: type描述c单个字符d十进制整数(int)ld十进制整数(long)f十进制浮点数(float) 6位小数lf十进制浮点数(double) 6位小数e以指数形式输出实数E以指数形式输出实数 e符号大写E表示g选用f与e格式中输出宽度较小的格式,6位有效数字,会将多余的0删除G选用f与e格式中输出宽度较小的格式,6位有效数字,会将多余的0删除 使用指数表示时 e符号大写E表示n只能对应浮点型,将值转化为号码的形式,X无符号十六进制数 用大写字母A,B,C,D,E,F来表示10到15之间的数s字符串u无符号十进制数o无符号八进制数x无符号十六进制数 用小写字母a,b,c,d,e,f来表示10到15之间的数X无符号十六进制数 用大写字母A,B,C,D,E,F来表示10到15之间的数 1.2、[index “:”]

[index “:”] 中的index指示Args中参数显示的顺序

str.Format(_T("this is %d %d"),12,13);

其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候是: this is 12 13

str.Format(_T("this is %1:d %0:d"),12,13);

那么返回的字符串就变成了: this is 13 12

1.3、[width]

[width] 指定将被格式化的值占的宽度

str.Format(_T("this is %4d"),12); //str="this is 12"

如果Width的值小于参数的长度,则没有效果。

str.Format(_T("this is %1d"),12); //str="this is 12" 1.4、["-"]

["-"] 这个指定参数向左齐,在右侧补空格,和[width]合在一起最可以看到效果:

str.Format(_T("this is %-4d,yes"),12); //str="this is 12 ,yes" 1.5、["." prec]

["." prec] 指定精度,对于浮点数效果最佳

str.Format(_T("this is %.2f"), 1.1234); //str="this is 1.12" str.Format(_T("this is %.7f"), 1.1234); //str="this is 1.1234000"

对于整型数,如果prec比如整型的位数小,则没有效果 反之比整形值的位数大,则会在整型值的前面以0补之

str.Format(_T("this is %.7d"), 1234); //str="this is 0001234"

结果与如下利用[width] 进行控制相同,这里%07中,写成%7则会在左侧补空格,%07则在左侧补0

str.Format(_T("this is %07d"), 1234); //str="this is 0001234"

对于字符型,刚好和整型值相反,如果prec比字符串型的长度大 则没有效果,反之比字符串型的长度小,则会截断尾部的字符

str.Format(_T("this is %.2s"), _T("1234")); //str="this is 12" 2、int、long 转 CString: int num = 1024; CString strNum; strNum.Format(_T("%d"), num); //strNum="1024" 数字转字符串 strNum.Format(_T("%5d"), num); //strNum=" 1024" 5表示占用5位 不足5位高位补空格 strNum.Format(_T("%05d"), num); //strNum="01024" 5表示占用5位 0表示不足5位高位补0

long转换为CString的方法与上面相似,只需把%d改为%ld。

3、double转换为CString: float num = 10.24; CString strNum; strNum.Format(_T("%f"), num); //strNum="10.240000" 数字转字符串,f为六位小数 strNum.Format(_T("%.1f"), num); //strNum="10.2" .1表示保留小数点后1位 多余部分四舍五入 strNum.Format(_T("%.4f"), num); //strNum="10.2400" .4表示保留小数点后4位 多余部分四舍五入 strNum.Format(_T("%8.4f"), num); //strNum=" 10.2400" 字符串一共8位(包括小数点)不足8位整数高位补空格 .4表示保留小数点后4位 小数多余部分四舍五入 strNum.Format(_T("%08.4f"), num); //strNum="010.2400" 字符串一共8位(包括小数点)不足8位整数高位补0 .4表示保留小数点后4位 小数多余部分四舍五入

double转换为CString的方法与上面相似,将f%改为lf%就可以了。

4、将十进制数转换为八进制: int num = 1024; CString strNum; strNum.Format(_T("%o"), num); //strNum="2000" strNum.Format(_T("%08o"), num); //strNum="00002000" 5、特别的 5.1、补零

只要在[width]前加0即可

str.Format(_T("this is %6d"), 12); //str="this is 12" str.Format(_T("this is %06d"), 12); //str="this is 000012" 5.2、对齐规则

当指定宽度大于要输出位数时,数右对齐,左端补空格,当前缀’-‘号时,想要数左对齐,右端补空格 前提:只有当“指定宽度”存在时,前缀’-'才有意义。 经验:一般来说,左端对齐的形式看上去要美观整齐一点。

5.3、输出正负号的技巧: str.Format(_T("this is %+6d"), 12); //str="this is +12" str.Format(_T("this is %+06d"), 12); //str="this is +00012"

只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号) 如果不希望正数的前面出现‘+’号,只要在中间加个“ ”号(即:空格)就行。 这样如果一个数是非负数,就在它的前面插入一个空格。 如果‘+’和‘ ’同时出现在“中间”时,要以‘+’为准。 两个符号的共同点:用于对齐输出的数:(尤其对于小数来说)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有